import java.util.*;

public class MapAndSet {

    /**
     * 前 K 个高频单词
     * @param words
     * @param k
     * @return
     */
    public List<String> topKFrequent(String[] words, int k) {
        HashMap<String,Integer> map = new HashMap<>();
        for (String word : words) {
            map.put(word,map.getOrDefault(word,0) + 1);
        }

        List<String> list = new ArrayList<>();
        for (Map.Entry<String,Integer> entry : map.entrySet()) {
            list.add(entry.getKey());
        }

        Collections.sort(list,new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return map.get(o1) == map.get(o2) ?
                        o1.compareTo(o2) : map.get(o2) - map.get(o1);
            }
        });
        return list.subList(0,k);
    }
//    public List<String> topKFrequent(String[] words, int k) {
//        Map<String,Integer> map = new HashMap<>();
//        for (String s : words) {
//            //V.getOrDefault(Object key,V defaultValue) 返回key对应的value,key不存在,返回默认值
//            map.put(s,map.getOrDefault(s,0) + 1);
//        }
//
//        List<String> list = new ArrayList<>();
//        for (Map.Entry<String,Integer> entry : map.entrySet()) {
//            list.add(entry.getKey());
//        }
//
//        Collections.sort(list, new Comparator<String>() {
//
//            @Override
//            public int compare(String o1, String o2) {
//                return map.get(o1) == map.get(o2) ? o1.compareTo(o2) : map.get(o2) - map.get(o1);
//            }
//        });
//        return list.subList(0,k);
//    }

    public static void main2(String[] args) {
        Set<Integer> set = new TreeSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        set.add(3); //去重效果

        System.out.println(set);

//        set.clear();
//        System.out.println(set);

        Iterator<Integer> it = set.iterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }
        System.out.println();

        Set<String> set2 = new TreeSet<>();
        set2.add("abcd");

        System.out.println(set2.contains("a"));


    }

    public static void main1(String[] args) {
        Map<String,Integer> map = new TreeMap<>();
        map.put("hello",1);
        map.put("world",2);
        map.put("world",3); //map的键是唯一的, 但值是可以修改的
        System.out.println(map);

        Set<String> strings = map.keySet();
        System.out.println(strings);

        Collection<Integer> val = map.values();
        System.out.println(val);

        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for(Map.Entry<String,Integer> entry : entrySet) {
            System.out.println("key: " + entry.getKey() + " value: " + entry.getValue());
        }


//        Integer val = map.get("hello");
//        System.out.println(val);
//
//        System.out.println(map.getOrDefault("hello", 3));
//        System.out.println(map.getOrDefault("minecraft", 3));
//
//        map.remove("hello");
//        System.out.println(map);

    }
}
